package com.yuw.mapdemo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class TestDriver_Map {
	public static void main(String[] args) {
		test03();
	}

	/**
	 * 泛型在ArrayList中用法
	 */
	private static void test03() {
		// 创建一个List的实例对象
		// 面向接口的编程思想；【多态：父类指代子类】
		List<String> lst0 = new ArrayList<>();

		// 向list集合中添加元素
		lst0.add("zhangsan");
		lst0.add("lisi");
		lst0.add("lisi");
		lst0.add(null);
		// lst0.add(1);
		lst0.add("wangwu");
		
		// 使用迭代器遍历list集合
		// 获取list迭代器
		Iterator<String> it = lst0.iterator();
		// 迭代器取出元素并打印
		while (it.hasNext()) {
			// 取出元素
			String str = it.next();
			System.out.println(str);
		}

	}

	/**
	 * 泛型在map集合中的使用
	 */
	private static void test02() {
		// 创建一个map对象
		// Map map0 = new HashMap();
		// Map map0 = new LinkedHashMap();
		Map<String, Object> map0 = new TreeMap<String, Object>();

		// 存入元素
		map0.put("zhangsan", 20);
		map0.put("lisi", 21);
		map0.put("lisi", 21);
		// map0.put(null, 21);
		map0.put("wangwu", 22);

		// map0.get("zhangsang");

		// 遍历元素进行输出
		// 先取出 Key的Set集合或者 Entry的Set集合，然后再对其进行遍历

		// 通过KeySet对map0进行遍历
		Set<String> setKeys = map0.keySet();
		System.out.println("增强型的for循环遍历Map的Key集合：");
		for (String str : setKeys) {
			// obj是当前变量的key的值
			// 通过调用map的get方法，通过key取出map中的与之对应的value值
			System.out.println(str + "-" + map0.get(str));
		}
		System.out.println("迭代器遍历Map的Key集合：");
		// 迭代器遍历
		Iterator<String> it = setKeys.iterator();
		while (it.hasNext()) {
			// 取出当前的key
			String key = it.next();
			System.out.println(key + "-" + map0.get(key));
		}

		System.out.println("=========================");
		// 通过EntrySet对map0进行遍历
		Set<Entry<String, Object>> EntryKeys = map0.entrySet();
		System.out.println("增强型的for循环遍历Map的Entry集合：");

		for (Entry<String, Object> en : EntryKeys) {
			// en是当前遍历的对象，是一个Entry键值对
			System.out.println(en.getKey() + "-" + en.getValue());
		}

		System.out.println("迭代器遍历Map的Entry集合：");
		// 迭代器遍历
		Iterator<Entry<String, Object>> it1 = EntryKeys.iterator();
		while (it1.hasNext()) {
			// 取出当前的Entry
			Entry<String, Object> en = it1.next();
			System.out.println(en.getKey() + "-" + en.getValue());
		}
	}

	/**
	 * map 的使用
	 */
	private static void test01() {
		// 创建一个map对象
		// Map map0 = new HashMap();
		// Map map0 = new LinkedHashMap();
		Map map0 = new TreeMap();

		// 存入元素
		map0.put("zhangsan", 20);
		map0.put("lisi", 21);
		map0.put("lisi", 21);
		// map0.put(null, 21);
		map0.put("wangwu", 22);

		// map0.get("zhangsang");

		// 遍历元素进行输出
		// 先取出 Key的Set集合或者 Entry的Set集合，然后再对其进行遍历

		// 通过KeySet对map0进行遍历
		Set setKeys = map0.keySet();
		System.out.println("增强型的for循环遍历Map的Key集合：");

		for (Object obj : setKeys) {
			// obj是当前变量的key的值
			// 通过调用map的get方法，通过key取出map中的与之对应的value值
			System.out.println(obj + "-" + map0.get(obj));
		}
		System.out.println("迭代器遍历Map的Key集合：");
		// 迭代器遍历
		Iterator it = setKeys.iterator();
		while (it.hasNext()) {
			// 取出当前的key
			Object key = it.next();
			System.out.println(key + "-" + map0.get(key));
		}

		System.out.println("=========================");
		// 通过EntrySet对map0进行遍历
		Set EntryKeys = map0.entrySet();
		System.out.println("增强型的for循环遍历Map的Entry集合：");

		for (Object obj : EntryKeys) {
			// obj是当前遍历的值，是一个Entry键值对
			// 向下溯型
			Entry en = (Entry) obj;
			System.out.println(en.getKey() + "-" + en.getValue());
		}

		System.out.println("迭代器遍历Map的Entry集合：");
		// 迭代器遍历
		Iterator it1 = EntryKeys.iterator();
		while (it1.hasNext()) {
			// 取出当前的Entry
			Entry en = (Entry) it1.next();
			System.out.println(en.getKey() + "-" + en.getValue());
		}
	}
}
